package jbit.dao;

import java.io.Serializable;
import java.util.List;

import jbit.entity.Employee;

import jbit.entity.ClaimVoucher;


public interface ClaimVoucherDao {
	/**
	 * 添加报销单。
	 * @param claimVoucher 报销单。
	 * @return 如果添加成功返回报销单对象，否则，抛出异常。
	 */
	public ClaimVoucher add(ClaimVoucher claimVoucher);

	/**
	 * 根据报销单Id删除对象。
	 * @param id 主键。
	 */
	public void deleteById(Serializable id);

	/**
	 * 修改报销单。
	 * @param claimVoucher 报销单。
	 * @return 如果修改成功返回报销单对象，否则，抛出异常。
	 */
	public ClaimVoucher update(ClaimVoucher claimVoucher);

	/**
	 * 根据报销单id加载对象。
	 * @param id 主键。
	 * @return 返回报销单对象。
	 */
	public ClaimVoucher get(Serializable id);

	/**
	 * 根据查询条件查询报销单数据。
	 * @param condition 查询条件。
	 * @return 如果condition为null，返回所有报销单数据，否则，使用报销单相关条件查询数据。
	 */
	public List<ClaimVoucher> find(ClaimVoucher condition);
	
	/**
	 * 得到员工的信息
	 * @param claimVoucher
	 * @return
	 */
	public ClaimVoucher getClaimVoucher(ClaimVoucher claimVoucher);

	/**
	 * 
	 * 员工查询时得到所有行的方法 当type的值为date时，表示要执行安日期进行查询
	 */
	public int getAllRowCount(final String hql, final ClaimVoucher condition,
			final Employee employee, String type);

	/**
	 * 员工提交或保存报销单后执行的查询方法
	 * 当type的值为date时，表示要执行按日期进行查询
	 */

	public List<ClaimVoucher> queryForPage(final String hql, final int offset,
			final int length, final ClaimVoucher condition, Employee employee,
			String type);

	/**
	 * 部门经理查询报销单方法 当type的值为date时，表示要执行按日期进行查询
	 * @param hql   hql语句
	 * @param offset 当前页开始记录
	 * @param length  每页记录数
	 * @param condition  条件
	 * @param employee 当前员工
	 * @param type  查询的类型
	 * @return  当前员工的报销单
	 */
	public List<ClaimVoucher> queryForPageM(final String hql, final int offset,
			final int length, final ClaimVoucher condition,
			final Employee employee, String type);

	/**
	 * 部门经理执行查询时调用该方法查询出总条数 当type的值为date时，表示要执行按日期进行查询
	 */

	public int getAllRowCountM(final String hql, final ClaimVoucher condition,
			final Employee employee, String type);
	
	public void deletClaimVoucher(ClaimVoucher claimVoucher);
	

}
